iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
Odoo

利用【AI】工具,聰明進行 Odoo 程式開發系列 第 9

Day9:個案一:學校圖書管理(5)-學生借閱,使用ChatGPT協助邏輯思考

  • 分享至 

  • xImage
  •  

使用者故事

作為一名讀者,我希望能在登入後查看書籍的可用性,並能在線預約或借閱書籍,以確保我能取得想要的書籍。

使用ChatGPT進行邏輯思考

不需要產生程式碼,協助規劃使用者故事

讀者能在登入後查看書籍的可用性,並能在線預約或借閱書籍

依功能開發項次,有順序的表列下來
並說明,可能使用的model及相關def 函數

ChatGPT回應


1. 讀者身份管理與登入功能

  • 目的:確保學生能夠以讀者身份登入系統並進行操作。
  • 涉及模型
    • library.student:學生資料模型,管理學生的個人信息。
    • res.users:Odoo 用戶模型,管理系統登入和權限。
  • 相關函數
    • 自動創建用戶帳號 (create_student_user):在創建學生時自動創建一個對應的 res.users 賬號,並關聯學生資料。
    • 讀者登錄流程驗證:使用 Odoo 的內建 auth 系統進行驗證,確保讀者能夠以正確的帳號登入。

2. 書籍可用性檢查

  • 目的:讓讀者能夠查看書籍當前是否可借閱。
  • 涉及模型
    • library.book:書籍資料模型,用來存儲書籍的狀態信息(是否已被借出)。
  • 相關函數
    • 書籍可用性檢查 (is_book_available):檢查書籍當前是否已借出(is_borrowed 字段)。
    • 顯示書籍可用性:根據書籍狀態顯示「可借」或「已借出」信息。

3. 書籍借閱功能

  • 目的:讓讀者能在線借閱可用的書籍,並自動記錄借閱信息。
  • 涉及模型
    • library.book:書籍資料模型,用來記錄書籍是否已被借出,以及借閱人信息。
    • library.student:與借閱的學生關聯,記錄借閱的詳細信息。
  • 相關函數
    • 書籍借閱操作 (action_borrow):當書籍處於可借狀態時,允許讀者借閱該書籍,並記錄借閱日期、借閱人。
    • 更新書籍狀態:將書籍狀態從「可借」更新為「已借出」,並關聯借閱人。
    • 書籍借閱紀錄:在借閱成功後,記錄借閱人和借閱日期,並生成相關操作的消息記錄。

4. 書籍預約功能

  • 目的:當書籍已被借出時,讀者可以進行預約,並在書籍歸還後自動通知讀者。
  • 涉及模型
    • library.book.reservation:書籍預約模型,記錄預約書籍的學生信息。
    • library.book:關聯預約的書籍資料。
  • 相關函數
    • 書籍預約操作 (action_reserve):當書籍已被借出時,允許讀者預約該書籍,並將其添加到預約隊列。
    • 預約狀態更新:記錄預約日期和預約狀態(如「等待中」、「已通知」等)。
    • 預約隊列管理:根據預約順序自動通知下一位讀者當書籍可用時。
    • 書籍預約取消:當讀者取消預約或借閱成功後,更新預約狀態為「已取消」。

5. 書籍歸還功能

  • 目的:讀者歸還書籍後,系統自動更新書籍狀態,並通知預約的讀者。
  • 涉及模型
    • library.book:記錄書籍的歸還狀態,並通知預約的學生。
    • library.book.reservation:管理預約的書籍。
  • 相關函數
    • 書籍歸還操作 (action_return):更新書籍狀態為「未借出」,並記錄歸還日期。
    • 預約通知功能:在書籍歸還後,自動通知預約隊列中的下一位讀者,提醒其書籍已可借閱。
    • 書籍歸還紀錄:在歸還成功後,記錄歸還時間和操作,並生成消息記錄。

6. 讀者借閱和預約記錄查詢

  • 目的:允許讀者查看自己的借閱和預約歷史,方便追蹤自己的借書狀態。
  • 涉及模型
    • library.book:讀者所借閱的書籍。
    • library.book.reservation:讀者預約的書籍。
  • 相關函數
    • 查詢借閱歷史:顯示當前讀者所借閱書籍的列表,包含借閱日期和狀態。
    • 查詢預約歷史:顯示當前讀者所預約書籍的列表,包含預約狀態和通知情況。

7. 權限與訪問控制

  • 目的:限制讀者只能進行書籍查詢、預約和借閱操作,不能執行管理員的其他操作。
  • 涉及模型
    • res.users:管理登入權限。
    • ir.model.access:控制讀者對書籍、預約、借閱的訪問權限。
  • 相關函數
    • 設置讀者的權限:限制讀者只能查看書籍可用性、借閱和預約功能,而無法進行其他系統操作。

依邏輯1產生對應程式嗎

要在 Odoo 17 中實現讀者身份管理與登入功能,確保學生能夠以讀者身份登入系統並進行操作,我們需要構建 library.student 模型,並將其與 res.users 進行關聯。這裡是具體的實現步驟,包括模型的設計和相關函數的實現。

1. 模型設計

models/library_student.py

library.student 模型將管理學生的個人信息,如姓名、學號、班級等,並且與 res.users 關聯,確保每個學生都有一個對應的用戶帳號。

from odoo import models, fields, api

class LibraryStudent(models.Model):
    _name = 'library.student'
    _description = '學生資料'

    name = fields.Char(string='姓名', required=True)
    student_number = fields.Char(string='學號', required=True, unique=True)
    class_name = fields.Char(string='班級')
    email = fields.Char(string='電子郵件')
    phone = fields.Char(string='電話')
    user_id = fields.Many2one('res.users', string='系統用戶', help='該學生對應的系統用戶')

    @api.model
    def create(self, vals):
        # 在創建學生時自動創建用戶帳號
        user_vals = {
            'name': vals['name'],
            'login': vals['email'],  # 以學生的電子郵件作為登入名
            'email': vals['email'],
            'partner_id': self.env['res.partner'].create({
                'name': vals['name'],
                'email': vals['email']
            }).id,
        }
        user = self.env['res.users'].create(user_vals)
        vals['user_id'] = user.id  # 將創建的用戶關聯到學生資料

        # 創建學生
        student = super(LibraryStudent, self).create(vals)

        # 回寫學生ID到res.users的student_id字段
        user.write({'student_id': student.id})

        return student

2. 自動創建用戶帳號

create_student_user

在創建學生時,會自動創建一個對應的 res.users 帳號,這樣學生就可以使用系統進行登入。

  • name: 學生的名字。
  • login: 使用學生的電子郵件作為登入名。
  • partner_id: 為該用戶創建一個對應的 res.partner(這是 Odoo 對應的聯絡人系統)。

這樣,每個學生都會自動關聯一個 Odoo 用戶帳號,並通過該帳號進行登入。

3. 讀者登入流程驗證

Odoo 內建的身份驗證系統會自動處理用戶的登入過程。在這裡,我們只需要確保用戶在登錄後能夠根據 user_id 關聯到對應的學生資料。

res.users 的擴展

我們可以擴展 res.users,以便在登錄後能夠查看對應的 library.student 資料:

from odoo import models, fields

class ResUsers(models.Model):
    _inherit = 'res.users'

    student_id = fields.Many2one('library.student', string='學生資料', help='此用戶對應的學生資料')

4. 模型關聯與用戶權限

最後,您需要在 ir.model.access.csv 文件中設置模型的訪問權限,確保讀者只能查看自己的資料並進行相關操作:

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_library_student_user,student.user,model_library_student,group_student,1,0,0,0

本章結語

1. 使用 ChatGPT 協助邏輯思考

在程式開發的過程中,邏輯思考與架構規劃是解決複雜問題的核心。開發者往往會先解決主要的功能需求,再通過持續的測試與調整來逐步完善系統。透過 ChatGPT,開發者可以加速這一過程。ChatGPT 不僅能提供即時的建議,還可以幫助開發者第一時間釐清思路,減少因為思路不完整或疏漏細節所帶來的問題。ChatGPT 能夠協助開發者從規劃到實作的每個階段,透過不斷的調整與優化,最終達到開發目標。

2. 依邏輯思考逐一完成

程式開發的過程需要系統化的邏輯思考,將每個功能模組逐一規劃並實作。這意味著在解決一個功能的同時,還需要預見後續的需求和邏輯關聯。透過規劃的邏輯思路逐一完成程式功能,不僅可以提高開發效率,還能降低未來系統維護的複雜度。每個步驟都應根據需求進行拆解,先實作核心功能,再補充細節,最後進行整體優化。這種方式不僅能確保程式的可讀性和穩定性,也能有效解決開發過程中遇到的各種問題。

3. 測試與迭代的重要性

程式開發是一個持續迭代的過程,即便是經過良好規劃和邏輯思考的程式碼,仍可能在實際運行時出現預期外的情況。因此,測試成為了開發流程中不可或缺的環節。透過不斷的測試,開發者可以發現潛在問題並加以修正,進而完善系統功能。同時,每次迭代都應根據先前的測試結果來進行調整和優化,以確保系統運行的穩定性和效率。

4. 持續優化與技術精進

在現代開發中,系統的迭代和優化幾乎是持續不斷的。技術日新月異,開發者需要不斷學習新技術並將其應用到開發過程中。使用像 ChatGPT 這樣的工具,開發者可以更快速地探索新的技術解決方案,並且在現有技術基礎上進行更深入的優化。這種持續的優化不僅有助於提升系統的性能,還能讓開發者的技能得到進一步的提升。

相關程式碼逐章更新

https://github.com/kulius/odoo17_ithelp

上一篇
Day8:個案一:學校圖書管理(4)-持續深化【使用者故事+程式邏輯】
下一篇
Day10:個案一:學校圖書管理(6)-學生借閱及權限
系列文
利用【AI】工具,聰明進行 Odoo 程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言